Стандартное диалоговое окно выбора цвета выглядит так.

Давайте создадим приложение на базе диалогового окна с кнопкой, по которой будет произведен вызов этого диалогового окна. Вот код по нажатию на кнопку.
void CTestColorDlg::OnButton1()
{
CColorDialog cc(NULL,NULL,NULL);
if (cc.DoModal()==IDOK)
{
color=cc.GetColor();
}
}
Есть стандартный класс CColorDialog, который ответственен за
создание диалогового окна выбора цветов. Конструктор класса перегружает все
параметры по умолчанию и поэтому в принципе их можно не указывать. Упоминание
NULL у меня три раза только для демонстрации того, что эти три параметра
существуют. CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL );В таком виде программа тоже будет работать.
void CTestColorDlg::OnButton1()
{
CColorDialog cc;
if (cc.DoModal()==IDOK)
{
color=cc.GetColor();
}
}
После объявления класса его можно запустить на выполнение использовавшись
DoModal, и если после выбора была нажата кнопка OK (IDOK)
можно получить цвета использовав getColor. Результат вернется в формате
COLORREF, поэтому переменная color должна быть объявленна как COLORREF color;На панели выбора цветов есть как основные цвета так и дополнительные. Когда панель зарускается первый раз дополнительные цвета пустые. Пользователь может их дополнять. Но после выхода из приложения они сбросятся. При необходимости доступа к дополнительным цветам есть функция GetSavedCustomColors, которая вернет указатель на массив из 16 элементов COLORREF
static COLORREF * GetSavedCustomColors( );